package persistencia.xml;

import java.beans.PersistenceDelegate;
import java.beans.XMLEncoder;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import compartido.IEntidad;

public class CodificadorXML {
	protected static CodificadorXML instancia = null;
	
	protected Map<Class<?>, PersistenceDelegate> delegados;
	
	protected CodificadorXML() {
		delegados = new HashMap<Class<?>, PersistenceDelegate>();
	}
	
	public static CodificadorXML getInstancia() {
		if (instancia == null)
			instancia = new CodificadorXML();
		return instancia;
	}

	public void registrarDelegado(Class<?> clase, PersistenceDelegate delegado) {
		if ((clase != null) && (delegado != null))
				delegados.put(clase, delegado);
	}
	
	public XMLEncoder armarCodificador(OutputStream stream) {
		XMLEncoder encoder = new XMLEncoder(stream);

		for (Entry<Class<?>, PersistenceDelegate> par : delegados.entrySet())
			encoder.setPersistenceDelegate(par.getKey(),par.getValue());
		
		return encoder;
	}
}
